package array;


import java.util.ArrayList;

public class MinSubArrayLen {

    public static void main(String[] args) {
        int[] nums = new int[]{1,2,3,4,5};
        int target = 11;
        System.out.println(minSubArrayLen(target, nums));
    }

    public static int minSubArrayLen(int target, int[] nums) {
//        int p = 0, q = 1, min = Integer.MAX_VALUE, sum = nums[p];
//        while (q < nums.length) {
//            if (sum < target) {
//                sum += nums[q++];
//            } else if (sum > target) {
//                sum -= nums[p++];
//            } else {
//                if (min > q - p) {
//                    min = q - p;
//                }
//                sum += nums[q++];
//            }
//        }
//        while (p < nums.length) {
//            if (sum > target) {
//                sum -= nums[p++];
//            }
//            if (sum == target && min > q - p) {
//                min = q - p;
//            }
//            sum -= nums[p++];
//        }
//        return min == Integer.MAX_VALUE ? 0 : min;
        int left = 0;
        int sum = 0;
        int result = Integer.MAX_VALUE;
        for (int right = 0; right < nums.length; right++) {
            sum += nums[right];
            while (sum >= target) {
                result = Math.min(result, right - left + 1);
                sum -= nums[left++];
            }
        }
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}
